#!/bin/bash
###
# @Author: Logan.Li
# @Gitee: https://gitee.com/attacker
# @Email: admin@attacker.club
# @Date: 2024-12-27
# @Description: 自动扩展 LVM 卷
###

# 确保以 root 用户运行
if [[ $(id -u) -ne 0 ]]; then
    echo "请以 root 用户运行此脚本！"
    exit 1
fi

# 自动获取默认卷组和逻辑卷名称
VG=$(vgs --noheadings -o vg_name | awk '{print $1}')
if [ -z "$VG" ]; then
    echo "未找到任何卷组，请检查系统配置！"
    exit 1
fi

LV=$(lvs --noheadings -o lv_name | awk '{print $1}')
if [ -z "$LV" ]; then
    echo "未找到任何逻辑卷，请检查系统配置！"
    exit 1
fi

# 查找未分配到卷组的磁盘，按大小降序排序，获取最大的磁盘
DISK=$(lsblk -dnb -o NAME,SIZE | grep -v 'vg' | sort -k2 -rn | head -n 1 | awk '{print "/dev/"$1}')
if [ -z "$DISK" ]; then
    echo "未找到可用于扩容的未分配磁盘，请检查磁盘情况！"
    exit 1
fi

# 检查磁盘是否存在
if [ ! -e "$DISK" ]; then
    echo "磁盘 $DISK 不存在，请检查磁盘路径！"
    exit 1
fi

# 创建物理卷
echo "创建物理卷 $DISK..."
pvcreate $DISK || { echo "物理卷创建失败！"; exit 1; }

# 将物理卷添加到卷组
echo "将物理卷 $DISK 添加到卷组 $VG..."
vgextend $VG $DISK || { echo "卷组扩展失败！"; exit 1; }

# 扩展逻辑卷
echo "扩展逻辑卷 $LV..."
lvextend -l +100%FREE /dev/$VG/$LV || { echo "逻辑卷扩展失败！"; exit 1; }

# 获取文件系统类型
FSTYPE=$(blkid -o value -s TYPE /dev/$VG/$LV)
if [ "$FSTYPE" == "xfs" ]; then
    echo "扩展文件系统（XFS）..."
    xfs_growfs /dev/mapper/$VG-$LV || { echo "XFS 文件系统扩展失败！"; exit 1; }
elif [ "$FSTYPE" == "ext4" ]; then
    echo "扩展文件系统（EXT4）..."
    resize2fs /dev/$VG/$LV || { echo "EXT4 文件系统扩展失败！"; exit 1; }
else
    echo "不支持的文件系统类型：$FSTYPE"
    exit 1
fi

# 查看扩展后的文件系统信息
echo "扩展后的文件系统信息："
df -h | grep "/dev/mapper/$VG-$LV"

echo "磁盘扩容完成！"
